if(MINIMAL_BUILD)
  set(tools
        obabel
  )
else(MINIMAL_BUILD)
  find_package(Boost COMPONENTS program_options iostreams)
  if(Boost_FOUND)
    include_directories(${Boost_INCLUDE_DIRS} ${Boost_INCLUDE_DIR})
  endif()


  set(tools
        obabel
        obconformer
        obenergy
        obfit
	obfitall
        obgen
        obminimize
        obmm
        obprobe
        obprop
        obrotamer
        obrotate
        obsym
        obtautomer
        obthermo
     )
  if(EIGEN3_FOUND)
    set(tools
        ${tools}
        obdistgen
    )
  endif()
endif(MINIMAL_BUILD)

INCLUDE(CheckFunctionExists)
SET(GETOPT getopt)
CHECK_FUNCTION_EXISTS(${GETOPT} GETOPT_FOUND)

if(BUILD_SHARED)
  foreach(tool ${tools})
    add_executable(${tool} ${tool}.cpp)
    target_link_libraries(${tool} ${BABEL_LIBRARY})
    install(TARGETS ${tool}
                    RUNTIME DESTINATION bin
                    LIBRARY DESTINATION lib${LIB_SUFFIX}
                    ARCHIVE DESTINATION lib${LIB_SUFFIX}
    )
  endforeach(tool)

  if(NOT MINIMAL_BUILD)
    # obgrep, obrms, obspectrophore -- require getopt
    set(toolnames obgrep obspectrophore)
    if(EIGEN3_FOUND)
      set(toolnames ${toolnames} obrms)
    endif()
    foreach(tool ${toolnames})
      if (NOT GETOPT_FOUND)
        add_executable(${tool} ${tool}.cpp getopt.c)
      else(NOT GETOPT_FOUND)
        add_executable(${tool} ${tool}.cpp)
      endif(NOT GETOPT_FOUND)
      target_link_libraries(${tool} ${BABEL_LIBRARY})
      install(TARGETS ${tool}
                      RUNTIME DESTINATION bin
                      LIBRARY DESTINATION lib${LIB_SUFFIX}
                      ARCHIVE DESTINATION lib${LIB_SUFFIX}
      )
    endforeach()

  endif(NOT MINIMAL_BUILD)

else(BUILD_SHARED)
###############################################################################
#
# Build STATIC obabel with all plugins taken from the static libopenbabel.a
#
###############################################################################

  # Set libs to imported openbabel target
  set(libs openbabel)
  if(WITH_STATIC_INCHI)
    set(libs ${libs} ${INCHI_LIBRARY})
  endif()
  if(WITH_STATIC_LIBXML)
    set(libs ${libs} ${LIBXML2_LIBRARIES})
  endif()

  if(NOT MSVC)
    find_package(Threads)
    if(BUILD_MIXED)
      list(APPEND libs Threads::Threads)
    elseif(CMAKE_USE_PTHREADS_INIT)
      # Make sure to find the static library
      find_library(PTHREAD_LIBRARY NAMES pthread)
      list(APPEND libs ${PTHREAD_LIBRARY})
    endif()

    if(BUILD_MIXED)
      if(CMAKE_COMPILER_IS_GNUCXX)
        if(CMAKE_SYSTEM_NAME MATCHES Linux)

          #
          # Relocatable binaries on linux using -static-libgcc. (GCC only)
          #
          set(CMAKE_CXX_FLAGS "-static-libgcc ${CMAKE_CXX_FLAGS}")
          # make sure the linker will find the static libstdc++
          file(REMOVE "${CMAKE_BINARY_DIR}/libstdc++.a")
          execute_process(COMMAND "g++" "-print-file-name=libstdc++.a"
                          OUTPUT_VARIABLE libstdcpp
                          OUTPUT_STRIP_TRAILING_WHITESPACE)
          execute_process(COMMAND "ln" "-s" "${libstdcpp}"
                          WORKING_DIRECTORY ${CMAKE_BINARY_DIR})

          link_directories(${CMAKE_BINARY_DIR})

        endif(CMAKE_SYSTEM_NAME MATCHES Linux)
      endif(CMAKE_COMPILER_IS_GNUCXX)
    else(BUILD_MIXED)
      #
      # Default static build using GNU-like compiler.
      #
      if (NOT APPLE)
            set(CMAKE_CXX_FLAGS "-static ${CMAKE_CXX_FLAGS}")
      endif()
      # APPLE doesn't use -static
    endif(BUILD_MIXED)
  endif()

  # build a static obabel only
  add_executable(obabel obabel.cpp)
  target_link_libraries(obabel ${libs})

  if(NOT BUILD_MIXED)
    # Prevent -Wl,-Bdynamic from being added to the end of the link line.
    set_target_properties(obabel PROPERTIES LINK_SEARCH_END_STATIC TRUE)
  endif(NOT BUILD_MIXED)

  install(TARGETS obabel
          RUNTIME DESTINATION bin
          LIBRARY DESTINATION lib${LIB_SUFFIX}
          ARCHIVE DESTINATION lib${LIB_SUFFIX})

endif(BUILD_SHARED)
